# 导入numpy库，numpy是一个用于科学计算的Python库
import numpy as np
# 定义目标向量
target_vector = np.array([1, 2])
# 定义四个人名的列表
names = ['sy', 'qq', 'lm', 'mgt']
# 定义与每个人名对应的向量
vector_sy = np.array([4, 6])
vector_qq = np.array([1, 2])
vector_lm = np.array([10, 11])
vector_mgt = np.array([1, 3])
# 方法一：计算每个向量与目标向量之间的欧几里得距离
# 计算'vector_sy'与'target_vector'之间的距离
dis1 = np.sum(np.power(vector_sy[0]-target_vector[0], 2) +
               np.power(vector_sy[1]-target_vector[1], 2))
# 计算'vector_qq'与'target_vector'之间的距离，使用numpy的广播特性
dis2 = np.sum(np.power(vector_qq - target_vector, 2))
# 计算'vector_lm'与'target_vector'之间的距离
dis3 = np.sum(np.power(vector_lm - target_vector, 2))
# 计算'vector_mgt'与'target_vector'之间的距离
dis4 = np.sum(np.power(vector_mgt - target_vector, 2))
# 将计算得到的距离存储在数组中
np_index = np.array([dis1, dis2, dis3, dis4])
# 找到距离最小的索引值
index = np.argmin(np_index)
# 打印距离最小的人名
print(names[index])
# 方法二：使用广播计算所有向量与目标向量之间的距离
# 将所有向量放入一个2维numpy数组中
vector = np.array([vector_sy, vector_qq, vector_lm, vector_mgt])
# 使用广播计算每个向量与目标向量之间的距离，并将结果存储在数组'dis'中
dis = np.sum(np.power(vector - target_vector, 2), axis=1)
# 找到距离最小的索引值
index = np.argmin(dis)
# 打印距离最小的人名
print(names[index])
# 使用numpy的linalg.norm函数计算范数（欧几里得距离）
dis_list = np.linalg.norm(vector - target_vector, axis=1)
# 将人名和对应的距离组合在一起
nane_zip = zip(names, dis_list)
# 将组合转换为列表
nane_zip_list = list(nane_zip)
# 打印组合列表
print(nane_zip_list)
# 将组合列表转换为numpy数组，数据类型为object
nane_zip_list = np.array(nane_zip_list, dtype=object)
# 使用argsort函数根据距离对组合数组进行排序
name_sort = np.argsort(nane_zip_list[:, 1])
# 打印排序后的索引
print(name_sort)
# 打印距离最小的人名
print(names[name_sort[0]])